package br.com.mauricioreis.db;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.widget.EditText;

/**
 * Classe com metodos estaticos utilitarios de uso comum
 * 
 * @author mauricio
 * 
 */
public class Util {

    /**
     * Converte um Calendar para uma String no formato yyyy-MM-dd HH:mm:ss
     * 
     * @param data
     * @return
     */
    public static String calendarParaString(Calendar data) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        return df.format(data.getTime());
    }

    /**
     * Converte uma String no formato yyyy-MM-dd HH:mm:ss para Calendar retorna nulo se o formato da String passada não for valido
     * 
     * @param data
     * @return
     */
    public static Calendar stringParaCalendar(String data) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Calendar cal = Calendar.getInstance();
        try {
            cal.setTime(df.parse(data));
        } catch (Exception e) {
            return null;
        }
        return cal;
    }

    /**
     * Converte um Calendar para uma String no formato de vizualização para o usuario dd/MM/yyyy as HH:mm:ss
     * 
     * @param data
     * @return
     */

    public static String calendarParaStringDeView(Calendar data) {
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy 'as' HH:mm:ss");

        return df.format(data.getTime());
    }

    /**
     * Monta data no formato yyyy-MM-dd
     * 
     * @param ano
     *            quatro digitos
     * @param mes
     *            de 0 a 11
     * @param dia
     * @return
     */
    public static String montaDatayyyyMMdd(int ano, int mes, int dia) {
        String sAno = Integer.toString(ano);
        mes++;
        String sMes = Integer.toString(mes);
        String sDia = Integer.toString(dia);
        if (sMes.length() == 1) {
            sMes = "0" + sMes;
        }
        if (sDia.length() == 1) {
            sDia = "0" + sDia;
        }
        return sAno + "-" + sMes + "-" + sDia;
    }

    /**
     * Recebe o valor de um nutriente no formato float e transforma ele em String arredondado com duas casa de precisão
     * 
     * @param nutriente
     *            em gramas
     * @return nutriente em gramas formatado
     */
    public static CharSequence formataNutrienteEmGramasParaExibicao(Float nutriente) {
        Double nutrienteFormatadoDouble = (double) nutriente * 100;
        Long nutrienteFormatadoLong = Math.round(nutrienteFormatadoDouble);
        Float nutrienteFormatadoFloat = (float) (nutrienteFormatadoLong / 100);
        String nutrienteFormatadoString = nutrienteFormatadoFloat.toString();
        nutrienteFormatadoString = retiraDecimalNaoSignificativo(nutrienteFormatadoString);
        return nutrienteFormatadoString;
    }

    /**
     * se o numero termina com .0 retira o .0
     */
    private static String retiraDecimalNaoSignificativo(String numero) {
        // se o numero termina com .0 retira o .0
        if (numero.substring(numero.length() - 2).equals(".0")) {
            numero = numero.substring(0, numero.length() - 2);
        }
        return numero;
    }

    /**
     * Recebe o valor de um nutriente no formato float em gramas e transforma ele em String arredondado com duas casa de precisão e em
     * miligramas
     * 
     * @param nutriente
     *            em gramas
     * @return nutriente em miligramas formatado
     */
    public static CharSequence formataNutrienteEmMiligramasGramasParaExibicao(Float nutriente) {
        Double nutrienteFormatadoDouble = (double) nutriente * 100000;
        Long nutrienteFormatadoLong = Math.round(nutrienteFormatadoDouble);
        Float nutrienteFormatadoFloat = (float) (nutrienteFormatadoLong / 100);
        String nutrienteFormatadoString = nutrienteFormatadoFloat.toString();
        nutrienteFormatadoString = retiraDecimalNaoSignificativo(nutrienteFormatadoString);
        return nutrienteFormatadoString;
    }

    public static Calendar montaCalendarComDataHora(int dia, int mes, int ano, int hora, int minuto, int segundo) {
        Calendar data = Calendar.getInstance();
        data.set(ano, mes, dia, hora, minuto, segundo);
        return data;
    }

    public static CharSequence formataExibicaoHoraMinuto(int hora, int minuto) {
        String sHora = Integer.toString(hora);
        String sMinuto = Integer.toString(minuto);
        if (sHora.length() == 1) {
            sHora = "0" + sHora;
        }
        if (sMinuto.length() == 1) {
            sMinuto = "0" + sMinuto;
        }
        return sHora + ":" + sMinuto;
    }

    /**
     * Transforma o valor de gramas para miligramas e transforma em string
     * 
     * @param micronutriente
     * @return
     */
    public static CharSequence formataMicroNutrienteParaExibicao(Float micronutriente) {
        return Float.toString((micronutriente * 1000));
    }

    public static Float formataMicroNutrienteParaSalvar(String micronutriente) {
        return Float.valueOf(micronutriente) / 1000;
    }

    /**
     * Extrai o valor do campo texto e o transforma em um float Caso o campo texto ou o valor dele sejam nulos, retorna 0F
     * 
     * @param et
     * @return
     */
    public static Float etToFloat(EditText et) {
        if (et != null && et.getText() != null && !et.getText().toString().isEmpty()) {
            String valorCampo = et.getText().toString();
            return Float.valueOf(valorCampo);
        }
        return 0F;
    }

    /**
     * Extrai o valor do campo texto e o transforma em um Integer Caso o campo texto ou o valor dele sejam nulos, retorna 0
     * 
     * @param et
     * @return
     */
    public static Integer etToInteger(EditText et) {
        if (et != null && et.getText() != null) {
            return Integer.valueOf(et.getText().toString());
        }
        return 0;
    }

}
